﻿using System;
using System.Data;
using System.Text;
using System.Web;
using System.Web.Security;
using MiEmpresa.BusinessLayer;

public partial class Plantilla : System.Web.UI.MasterPage
{
    #region Variables

    string LogoHeader = "Imagenes/EmpresaEnLineaHeader.png";
    cSeguridad secLayer = new cSeguridad();
    cReglasGenericas negLayer = new cReglasGenericas();
    Guid idUsuario = Guid.Empty;

    #endregion

    #region Eventos

    protected void Page_Load(object sender, EventArgs e)
    {
        if (ValidaUsuario() == false )
        {
            CerrarSesion();
        }
        else
        {
            CargaHeaderEmpresa();
            CargaMenuGeneral();
        }
    }
    
    #endregion

    #region Metodos

    /// <summary>
    /// Cargamos el header de la empresa.
    /// </summary>
    private void CargaHeaderEmpresa()
    {
        try
        {
            //Si la empreza no ha configurado un logo se toma uno default
            if (GetRutaLogoHeaderEmpresa() != string.Empty)
            {

            }
            else
            {
                imgHeaderLogoEmpresa.Src = LogoHeader;
            }
        }
        catch (Exception ex)
        {
            string sError = ex.Message;
            imgHeaderLogoEmpresa.Src = LogoHeader;
        }
    }

    /// <summary>
    /// Obtenemos la ruta del header de la empresa siempre y cuando tenga.
    /// </summary>
    /// <returns>LA ruta del header</returns>
    private string GetRutaLogoHeaderEmpresa()
    {
        return string.Empty;
    }

    /// <summary>
    /// Carga el menu general.
    /// </summary>
    private void CargaMenuGeneral()
    {
        negLayer.IdUsuario = idUsuario;
        CargaMenu();
    }

    /// <summary>
    /// Valida el usuario a partir de la DLL.
    /// </summary>
    /// <returns>true si se pudo validar y false si no</returns>
    private bool ValidaUsuario()
    {
        if (Request.QueryString["field"] == string.Empty || Request.QueryString["field"] == null)
        {
            return false;
        }
        else
        {
            try
            {
                idUsuario =new Guid(secLayer.DesencriptarURL("id", Request.QueryString["field"]));
                return true;
            }
            catch(Exception ex)
            {
                return false;
            }
        }        
    }

    /// <summary>
    /// Cierra la sesion.
    /// </summary>
    private void CerrarSesion()
    {
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.Cache.SetAllowResponseInBrowserHistory(false);
        Session.Abandon();
        Session.RemoveAll();
        FormsAuthentication.SignOut();
        Response.Write("<script language=javascript>var wnd=window.open('','newWin','height=1,width=1,left=900,top=700,status=no,toolbar=no,menubar=no,scrollbars=no,maximize=false,resizable=1');</script>");
        Response.Write("<script language=javascript>wnd.close();</script>");
        Response.Write("<script language=javascript>window.open('Login.aspx','_parent',replace=true);</script>");
    }
    
    protected void CargaMenu()
    {
        StringBuilder sbMenu = new StringBuilder();
        DataSet dsMenu = new DataSet();
        dsMenu = negLayer.GetMenuGeneral();


        sbMenu.AppendLine("<table cellpadding='0px' cellspacing='0px' style='border-collapse: collapse; border: 0px;' >");
        sbMenu.AppendLine("<tr>");
        for (int i = 0; i < dsMenu.Tables[0].Rows.Count; i++)
        {
            if (dsMenu.Tables[0].Rows[i]["fiNivel"].ToString() == "1")// Para los titulos del menu
            {
                sbMenu.AppendLine("<td>");
                if (dsMenu.Tables[0].Rows[i]["fcRutaPagina"].ToString().Trim() != "")
                {
                    sbMenu.AppendLine("<a tabindex='0' href='");
                    sbMenu.AppendLine(dsMenu.Tables[0].Rows[i]["fcRutaPagina"].ToString().Trim() + "?field=" + HttpUtility.UrlEncode(secLayer.EncriptarURL("id", idUsuario.ToString())));
                    sbMenu.AppendLine("' class='fg-button fg-button-icon-right ui-widget ui-state-default'>");
                    sbMenu.AppendLine(dsMenu.Tables[0].Rows[i]["fcNombrePagina"].ToString().Trim());
                    sbMenu.AppendLine("</a>");
                }
                else
                {
                    switch (dsMenu.Tables[0].Rows[i]["fcNombrePagina"].ToString().Trim())
                    {
                        case "Mi Empresa":
                            sbMenu.AppendLine("<a tabindex='0' href='#menuEmpresa' class='fg-button fg-button-icon-right ui-widget ui-state-default' id='msEmpresa'>");
                            sbMenu.AppendLine("<span class='ui-icon ui-icon-triangle-1-s'></span>");
                            sbMenu.AppendLine(dsMenu.Tables[0].Rows[i]["fcNombrePagina"].ToString().Trim());
                            sbMenu.AppendLine("</a>");
                            sbMenu.AppendLine("<div id='menuEmpresa' class='hidden'>");
                            CargaSubmenu(dsMenu.Tables[0].Rows[i]["fiIndice"].ToString(),
                                dsMenu.Tables[0].Rows[i]["fiNivel"].ToString(),
                                dsMenu.Tables[0].Rows[i]["fiPadre"].ToString(), dsMenu, ref sbMenu);
                            sbMenu.AppendLine("</div>");
                            break;
                        case "Ventas":
                            sbMenu.AppendLine("<a tabindex='0' href='#menuVentas' class='fg-button fg-button-icon-right ui-widget ui-state-default' id='msVentas'>");
                            sbMenu.AppendLine("<span class='ui-icon ui-icon-triangle-1-s'></span>");
                            sbMenu.AppendLine(dsMenu.Tables[0].Rows[i]["fcNombrePagina"].ToString().Trim());
                            sbMenu.AppendLine("</a>");
                            sbMenu.AppendLine("<div id='menuVentas' class='hidden'>");
                            CargaSubmenu(dsMenu.Tables[0].Rows[i]["fiIndice"].ToString(),
                                dsMenu.Tables[0].Rows[i]["fiNivel"].ToString(),
                                dsMenu.Tables[0].Rows[i]["fiPadre"].ToString(), dsMenu, ref sbMenu);
                            sbMenu.AppendLine("</div>");
                            break;
                        case "Mi cuenta":
                            sbMenu.AppendLine("<a tabindex='0' href='#menuMiCuenta' class='fg-button fg-button-icon-right ui-widget ui-state-default' id='msMiCuenta'>");
                            sbMenu.AppendLine("<span class='ui-icon ui-icon-triangle-1-s'></span>");
                            sbMenu.AppendLine(dsMenu.Tables[0].Rows[i]["fcNombrePagina"].ToString().Trim());
                            sbMenu.AppendLine("</a>");
                            sbMenu.AppendLine("<div id='menuMiCuenta' class='hidden'>");
                            CargaSubmenu(dsMenu.Tables[0].Rows[i]["fiIndice"].ToString(),
                                dsMenu.Tables[0].Rows[i]["fiNivel"].ToString(),
                                dsMenu.Tables[0].Rows[i]["fiPadre"].ToString(), dsMenu, ref sbMenu);
                            sbMenu.AppendLine("</div>");
                            break;
                        case "Reportes":
                            sbMenu.AppendLine("<a tabindex='0' href='#menuReportes' class='fg-button fg-button-icon-right ui-widget ui-state-default' id='msReportes'>");
                            sbMenu.AppendLine("<span class='ui-icon ui-icon-triangle-1-s'></span>");
                            sbMenu.AppendLine(dsMenu.Tables[0].Rows[i]["fcNombrePagina"].ToString().Trim());
                            sbMenu.AppendLine("</a>");
                            sbMenu.AppendLine("<div id='menuReportes' class='hidden'>");
                            CargaSubmenu(dsMenu.Tables[0].Rows[i]["fiIndice"].ToString(),
                                dsMenu.Tables[0].Rows[i]["fiNivel"].ToString(),
                                dsMenu.Tables[0].Rows[i]["fiPadre"].ToString(), dsMenu, ref sbMenu);
                            sbMenu.AppendLine("</div>");
                            break;
                        case "Inventario":
                            sbMenu.AppendLine("<a tabindex='0' href='#menuInventario' class='fg-button fg-button-icon-right ui-widget ui-state-default' id='msInventario'>");
                            sbMenu.AppendLine("<span class='ui-icon ui-icon-triangle-1-s'></span>");
                            sbMenu.AppendLine(dsMenu.Tables[0].Rows[i]["fcNombrePagina"].ToString().Trim());
                            sbMenu.AppendLine("</a>");
                            sbMenu.AppendLine("<div id='menuInventario' class='hidden'>");
                            CargaSubmenu(dsMenu.Tables[0].Rows[i]["fiIndice"].ToString(),
                                dsMenu.Tables[0].Rows[i]["fiNivel"].ToString(),
                                dsMenu.Tables[0].Rows[i]["fiPadre"].ToString(), dsMenu, ref sbMenu);
                            sbMenu.AppendLine("</div>");
                            break;
                    }
                }
                sbMenu.AppendLine("</td>");
            }
        }
        sbMenu.AppendLine("</tr>");
        sbMenu.AppendLine("</table>");
        lblMenuMaster.Text = sbMenu.ToString();
    }

    protected void CargaSubmenu(string sIndice, string sNivel, string sPadre, DataSet dsMenu, ref StringBuilder sbMenu)
    {
        sbMenu.AppendLine("<ul>");
        for (int i = 0; i < dsMenu.Tables[0].Rows.Count; i++)
        {
            if (dsMenu.Tables[0].Rows[i]["fiPadre"].ToString() == sIndice &&
                Convert.ToInt32(dsMenu.Tables[0].Rows[i]["fiNivel"].ToString()) == Convert.ToInt32(sNivel) + 1)
            {
                if (dsMenu.Tables[0].Rows[i]["fcRutaPagina"].ToString().Trim() != "")
                {
                    sbMenu.AppendLine("<li>");
                    sbMenu.AppendLine("<a href='");
                    sbMenu.AppendLine(dsMenu.Tables[0].Rows[i]["fcRutaPagina"].ToString().Trim() + "?field=" + HttpUtility.UrlEncode(secLayer.EncriptarURL("id", idUsuario.ToString())) + "'>");
                    sbMenu.AppendLine(dsMenu.Tables[0].Rows[i]["fcNombrePagina"].ToString().Trim());
                    sbMenu.AppendLine("</a>");
        sbMenu.AppendLine("</li>");
                }
                else
                {
                    sbMenu.AppendLine("<li>");
                    sbMenu.AppendLine("<a href='#'>");
                    sbMenu.AppendLine(dsMenu.Tables[0].Rows[i]["fcNombrePagina"].ToString().Trim());
                    sbMenu.AppendLine("</a>");
                    CargaSubmenu(dsMenu.Tables[0].Rows[i]["fiIndice"].ToString(),
                                dsMenu.Tables[0].Rows[i]["fiNivel"].ToString(),
                                dsMenu.Tables[0].Rows[i]["fiPadre"].ToString(), dsMenu, ref sbMenu);
                    sbMenu.AppendLine("</li>");
                }
            }
        }
        sbMenu.AppendLine("</ul>");
    }

    #endregion
}
